package com.hancher.gamelife2.noisedetect;

import android.graphics.Color;
import android.os.Bundle;

import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.hancher.common.androidutil.PathUtil;
import com.hancher.common.androidutil.ToastUtil;
import com.hancher.common.base.BaseFragment;
import com.hancher.gamelife2.databinding.FragmentNoiseDetectBinding;
import com.hjq.permissions.Permission;
import com.hjq.permissions.XXPermissions;

import java.io.File;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;

/**
 * 作者 : Hancher ytu_shaoweijie@163.com <br/>
 * 时间 : 2023/4/22 12:37 <br/>
 * 描述 : 噪音检测APP
 */
public class NoiseDetectFragment extends BaseFragment<FragmentNoiseDetectBinding> {

    private NoiseUtil record;

    @Override
    public void onResume() {
        super.onResume();
        XXPermissions.with(this)
                .permission(Permission.READ_MEDIA_IMAGES,
                        Permission.READ_MEDIA_VIDEO,
                        Permission.READ_MEDIA_AUDIO,
                        Permission.WRITE_EXTERNAL_STORAGE,
                        Permission.RECORD_AUDIO)
                .request((permissions2, allGranted) -> {
                    if (!allGranted) {
                        ToastUtil.show("权限未全部同意");
                        return;
                    }
                    start();
                });
    }

    @Override
    protected void initView(Bundle savedInstanceState) {
        initLineChart(binding.linechartWith);
    }

    @Override
    protected void initListener() {

    }

    @Override
    protected void initData() {

    }

    List<Double> data = new ArrayList<>();

    private void start() {
        File f = new File(PathUtil.OUT_APP_CACHE, "noise_detect.amr");
        if (f.exists()) {
            f.delete();
        }
        record = new NoiseUtil(f);
        record.setListener((db, amplitude) -> {
            binding.textView17.setText(String.format("噪音：%s db", BigDecimal.valueOf(db).setScale(6, RoundingMode.HALF_UP)));

            if (data.size() == 0 && db < 1) {
                return;
            }
            if (data.size() < 200) {
                data.add(db);
            } else {
                data.remove(0);
                data.add(db);
            }
            // 1. 每个数据是一个 Entry
            ArrayList<Entry> values = new ArrayList<>();
            for (int i = 0; i < data.size(); i++) {
                float val = data.get(i).floatValue();
                values.add(new Entry(i / 10.0f, val));
            }
            // 2. 创建一个数据集 DataSet ，用来添加 Entry。一个图中可以包含多个数据集
            LineDataSet set1 = new LineDataSet(values, "");
            // 3. 通过数据集设置数据的样式，如字体颜色、线型、线型颜色、填充色、线宽等属性
//            set1.enableDashedLine(10f, 5f, 0f);
            set1.setColor(Color.BLACK);
//            set1.setCircleColor(Color.BLACK);
            set1.setLineWidth(1f);
//            set1.setCircleRadius(3f);
            set1.setDrawCircleHole(false);
            set1.setDrawCircleHole(false);
            set1.setDrawValues(false);
            set1.setDrawCircles(false);
            set1.setMode(LineDataSet.Mode.CUBIC_BEZIER);//CUBIC_BEZIER 圆滑曲线
            // 4.将数据集添加到数据 ChartData 中
            LineData data = new LineData(set1);
            // 5. 将数据添加到图表中
            binding.linechartWith.setData(data);
            binding.linechartWith.invalidate();
        });
        record.startRecord();
    }

    private void initLineChart(LineChart chart) {

        //整个图表绘制
        chart.setBackgroundColor(Color.WHITE);// 背景色
        chart.getDescription().setEnabled(false);// 图表的文本描述

        // 添加监听器
//        chart.setOnChartValueSelectedListener(this);
        chart.setDrawGridBackground(false);
//        // 自定义 MarkView，当数据被选择时会展示
//        MyMarkerView mv = new MyMarkerView(this, R.layout.custom_marker_view);
//        mv.setChartView(chart);
//        chart.setMarker(mv);

        // 设置拖拽、缩放等
        chart.setDragEnabled(false);
        chart.setScaleEnabled(false);
        chart.setScaleXEnabled(false);
        chart.setScaleYEnabled(false);
        chart.setTouchEnabled(false);// 手势设置
        chart.setPinchZoom(false);// 设置双指缩放

        // X 轴
        XAxis xAxis = chart.getXAxis();
        xAxis.enableGridDashedLine(10f, 10f, 0f);// 允许显示 X 轴的垂直网格线
        xAxis.setAxisMaximum(20f);
        xAxis.setAxisMinimum(0f);
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//x轴标签下方显示

        // Y 轴
        chart.getAxisRight().setEnabled(false);// 禁止右轴
        YAxis yAxis = chart.getAxisLeft();
        yAxis.enableGridDashedLine(10f, 10f, 0f);// Y 轴的水平网格线
        yAxis.setAxisMaximum(120f);// 设置 Y 轴的数值范围
        yAxis.setAxisMinimum(0f);
    }

    @Override
    public void onPause() {
        if (record != null) {
            record.stopRecord();
        }
        super.onPause();
    }
}